package Database

/**
 * Created by Goland
 * User: wkk alisleepy@hotmail.com
 * Time: 2021/12/17 - 02:08
 * Desc: <Mysql连接处理>
 */

import (
	"fmt"
	"github.com/gookit/goutil/dump"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"gopkg.in/ini.v1"
)

var MysqlConfig = make(map[string]string)
var SqlDB *gorm.DB

// 连接数据库
func init() {
	// 1、获取mysql配置信息
	getMysqlConfig()
	if len(MysqlConfig) <= 0 {
		fmt.Println("获取数据库配置信息失败")
		panic("mysql config not load！")
	}

	// 2、获取数据库配置信息
	connArgs := conMysql()
	fmt.Println(connArgs)

	// 3、连接数据库
	db, err := gorm.Open(MysqlConfig["driver"], connArgs)
	if err != nil {
		fmt.Println("连接数据库失败:", err)
		return
	}

	fmt.Println("数据库连接成功！")

	SqlDB = db

	// 表名禁用复数
	db.SingularTable(true)

	// 设置表名格式：前缀 + 默认表名
	gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
		return MysqlConfig["prefix"] + defaultTableName
	}
}

func conMysql() string {
	connArgs := fmt.Sprintf(
		"%s:%s@(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
		MysqlConfig["username"],
		MysqlConfig["password"],
		MysqlConfig["host"],
		MysqlConfig["port"],
		MysqlConfig["database"],
		MysqlConfig["charset"],
	)
	return connArgs
}

// 获取mysql配置信息
func getMysqlConfig() {
	// 加载配置文件
	dataConfig, err := ini.Load("Conf/database.ini")
	if err != nil {
		dump.P("Fail to load file: %v", err)
		return
	}

	// 读取配置文件信息
	MysqlConfig["driver"] = dataConfig.Section("mysql").Key("driver").String()
	MysqlConfig["host"] = dataConfig.Section("mysql").Key("host").String()
	MysqlConfig["port"] = dataConfig.Section("mysql").Key("port").String()
	MysqlConfig["database"] = dataConfig.Section("mysql").Key("database").String()
	MysqlConfig["username"] = dataConfig.Section("mysql").Key("username").String()
	MysqlConfig["password"] = dataConfig.Section("mysql").Key("password").String()
	MysqlConfig["charset"] = dataConfig.Section("mysql").Key("charset").String()
	MysqlConfig["prefix"] = dataConfig.Section("mysql").Key("prefix").String()
}
